package com.bobo.nutzbook;

import org.nutz.mvc.annotation.IocBy;
import org.nutz.mvc.annotation.Modules;
import org.nutz.mvc.annotation.SetupBy;
import org.nutz.mvc.ioc.provider.ComboIocProvider;

@SetupBy(value=MainSetup.class)
/**
 * 一个Mvc框架可以通过Ioc接口同一个Ioc容器挂接，挂接的方法很简单：在主模块上声明 @IocBy。
 * 推荐使用ComboIocProvider来复合各种IocLoader。IocBy的默认type就是ComboIocProvider，可以省略不写。（参看复合加载器一节）
 * 在Nutz.Mvc中，Ioc容器是由IocProvider接口来提供的，所以每个加载器都由一个类似的IocProvier实现。比如 ComboIocLoader，也就对应有 ComboIocProvider。
 * 
 * 本例中的ComboIocProvider复合了三个ioc加载器：
 * 1.JsonIocLoader。Json加载器，负责加载ioc文件夹下所有以js或json结尾的配置文件。
 * 2.AnnotationIocLoader。Annotation加载器，负责扫描包com.bobo.nutzbook下所有声明了@IocBean的容器对象。
 * 3.TransIocLoader。负责加载内置的事务拦截器。
 * 
 * ComboIocLoader的构造函数是个字符串形变参数组，所有的参数，如果以星号"*"开头， 则被认为是加载器的类型，后面的参数都作为这个加载器的构造函数的参数，直到遇到下一个以 星号"*"开头的参数。 
 * 
 * 这三个加载器的优先级为：排在前面的加载器更优先。
 */
@IocBy(type=ComboIocProvider.class, args={"*js", "ioc/", //Json加载器，加载ioc文件夹下所有的js或json文件
									    "*anno", "com.bobo.nutzbook", //Annotation加载器，加载com.bobo.nutzbook下所有声明了@IocBean的类
									    "*tx"}) //加载失误拦截器
@Modules(scanPackage=true)
public class MainModule {

}
